package com.example.chapter3.homework;

import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.os.Handler;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.example.chapter3.homework.PageFragment.*;
import com.airbnb.lottie.LottieAnimationView;

import java.util.Objects;

/**
 * 使用 ViewPager 和 Fragment 做一个简单版的好友列表界面
 * 1. 使用 ViewPager 和 Fragment 做个可滑动界面
 * 2. 使用 TabLayout 添加 Tab 支持
 * 3. 对于好友列表 Fragment，使用 Lottie 实现 Loading 效果，在 5s 后展示实际的列表，要求这里的动效是淡入淡出
 */
public class Ch3Ex3Activity extends AppCompatActivity {

    private LottieAnimationView animationView;
    TextView textFrag2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ch3ex3);

        // 注册元素
        final TabLayout tabLayout = findViewById(R.id.ch3Ex3TabLayout);
        final ViewPager viewPager = findViewById(R.id.ch3Ex3ViewPager);


        // TODO: ex3-2, 添加 TabLayout 支持 Tab
        tabLayout.addTab(tabLayout.newTab().setText("Friend1"));
        tabLayout.addTab(tabLayout.newTab().setText("Friend2"));
        tabLayout.addTab(tabLayout.newTab().setText("Home"));
        tabLayout.addTab(tabLayout.newTab().setText("Record"));

//        设置点击tab时的监听
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
//                实际上是调用viewPAger的更迭函数
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

        // TODO: ex3-1. 添加 ViewPager 和 Fragment 做可滑动界面
        // 页面绑定
        viewPager.setAdapter(new PageAdapter(getSupportFragmentManager(), tabLayout.getTabCount()));
        // 设置监听
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {
                // TODO: 只要发生滑动即不断调用
            }

            @Override
            public void onPageSelected(int i) {
                // TODO: 更换选择页面
                Objects.requireNonNull(tabLayout.getTabAt(i)).select();

                // TODO: 当选中以"Friend2"为标识的tab时
                if (Objects.requireNonNull(tabLayout.getTabAt(i)).getText() == "Friend2") {
                    // 隐藏文本
                    textFrag2 = findViewById(R.id.vp_fragText2);
                    textFrag2.setVisibility(View.GONE);

                    // 显示lottie动画
                    animationView = findViewById(R.id.ch3_friend_loading);
                    animationView.setVisibility(View.VISIBLE);
                    animationView.playAnimation();

                    // 设置动画效果为渐变往返一次
                    ObjectAnimator animator = ObjectAnimator.ofFloat(animationView,
                            "alpha", 0f, 1f);
                    animator.setRepeatCount(1);
                    animator.setDuration(2500);
                    animator.setRepeatMode(ValueAnimator.REVERSE);

                    // 配置
                    AnimatorSet animatorSet = new AnimatorSet();
                    animatorSet.play(animator);
                    animatorSet.start();

                    // 设置动画执行的监听函数，主要用于end时重现文本，隐藏动画
                    animator.addListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animation) {

                        }

                        @Override
                        public void onAnimationEnd(Animator animation) {
                            animationView.setVisibility(View.GONE);
                            textFrag2.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onAnimationCancel(Animator animation) {

                        }

                        @Override
                        public void onAnimationRepeat(Animator animation) {

                        }
                    });

                }

            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });


    }
}
